package com.ssy.lingxi.member.merchant.model.constant;

import com.ssy.lingxi.common.language.LanguageHolder;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.DropdownItem;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 付款方式枚举
 * @author 万宁
 * @version 2.0.0
 * @date 2021-05-25
 */
public enum PaymentTypeEnum {

    /**
     * 付款方式枚举
     1、现金
     2、转账
     3、支票
     4、电汇（T/T）
     5、信汇
     6、银行汇票
     7、银行承兑汇票3个月
     8、银行承兑汇票6个月
     9、D/P付款交单
     10、D/A承兑交单
     11、L/C信用证
     */

    /**
     * 1、现金
     */
    CASH(1, "现金"),

    /**
     * 2、转账
     */
    TRANSFER_ACCOUNTS(2, "转账"),

    /**
     * 3、支票
     */
    CHECK(3, "支票"),

    /**
     * 4、电汇（T/T）
     */
    WIRE_TRANSFER(4, "电汇（T/T）"),

    /**
     * 5、信汇
     */
    MAIL_TRANSFER(5, "信汇"),

    /**
     * 6、银行汇票
     */
    BANK_DRAFT(6, "银行汇票"),

    /**
     * 7、银行承兑汇票3个月
     */
    BANK_ACCEPTANCE_BILL_3_MONTHS(7, "银行承兑汇票3个月"),

    /**
     * 8、银行承兑汇票6个月
     */
    BANK_ACCEPTANCE_BILL_6_MONTHS(8, "银行承兑汇票6个月"),

    /**
     * 9、D/P付款交单
     */
    D_P_D_P(9, "D/P付款交单"),

    /**
     * 10、D/A承兑交单
     */
    D_A_D_A(10, "D/A承兑交单"),

    /**
     * 11、L/C信用证
     */
    LETTER_OF_CREDIT(11, "L/C信用证");

    PaymentTypeEnum(Integer code, String msg) {
        this.code = code;
    }

    private final Integer code;

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return LanguageHolder.getName(this.getClass(), this.getCode());
    }

    public static List<DropdownItem> toDropdownList() {
        List<DropdownItem> items = Arrays.stream(PaymentTypeEnum.values()).sorted(Comparator.comparingInt(PaymentTypeEnum::getCode)).map(e -> new DropdownItem(e.getCode(), e.getMsg())).collect(Collectors.toList());
        items.add(0 , new DropdownItem(0, MemberStringEnum.CHOOSE.getName()));
        return items;
    }

    public static List<DropdownItem> toEditableDropdownList() {
        return Arrays.stream(PaymentTypeEnum.values()).sorted(Comparator.comparingInt(PaymentTypeEnum::getCode)).map(e -> new DropdownItem(e.getCode(), e.getMsg())).collect(Collectors.toList());
    }

    public static String getCodeMsg(Integer code) {
        return LanguageHolder.getName(PaymentTypeEnum.class, code);
    }

    /**
     * 根据枚举值获得名称
     * @param code 枚举值
     * @return 发票名称
     */
    public static String getNameByCode(Integer code) {
        return LanguageHolder.getName(PaymentTypeEnum.class, code);
    }
}
